AWS SDK for Go ファーストインプレッション
はじめに
これは素晴らしいニュースです!
もともとStripe社が開発していたaws-goプロジェクトがAWSに移管され、公式のSDKとしてリリースされるとのことです。Githubリポジトリ(https://github.com/awslabs/aws-sdk-go)で開発されているので、ソースを読むことも、試してみることもできます。
これは試さずにはいくまい。ということでやってみました!
やってみた
試した環境は以下の通りです。
$ go version go version go1.4.1 darwin/amd64
インストールはgo getでサクッと。今回はec2だけ入れてます。この時go1.3以下だと蹴られますので、事前に最新版をインストールしておきましょう。
$ go get github.com/awslabs/aws-sdk-go/gen/ec2
以下のようなソースを書きました。
$ cat ec2.go package main import ( "fmt" "os" "github.com/awslabs/aws-sdk-go/aws" "github.com/awslabs/aws-sdk-go/gen/ec2" ) func main() { accessKey := os.Getenv("AWS_ACCESS_KEY_ID") secretKey := os.Getenv("AWS_SECRET_ACCESS_KEY") defaultRegion := os.Getenv("AWS_DEFAULT_REGION") if accessKey == "" || secretKey == "" || defaultRegion == "" { fmt.Println("Error: Undefined AWS_ACCESS_KEY_ID or AWS_SECRET_ACCESS_KEY or AWS_DEFAULT_REGION") os.Exit(9) } creds := aws.Creds(accessKey, secretKey, "") cli := ec2.New(creds, defaultRegion, nil) resp, err := cli.DescribeInstances(nil) if err != nil { panic(err) } if len(resp.Reservations) < 1 { return } for i := range resp.Reservations { fmt.Print(i) fmt.Print(" , ") fmt.Print(*resp.Reservations[i].Instances[0].VPCID) fmt.Print(" , ") fmt.Print(*resp.Reservations[i].Instances[0].SubnetID) fmt.Print(" , ") fmt.Print(*resp.Reservations[i].Instances[0].InstanceID) fmt.Print(" , ") fmt.Print(*resp.Reservations[i].Instances[0].InstanceType) fmt.Print(" , ") fmt.Println(*resp.Reservations[i].Instances[0].ImageID) } }
必要な環境変数(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_DEFAULT_REGION)を設定し、go buildしたバイナリを実行すると、以下のように出力されます!
$ ./ec2 0 , vpc-8c929xxx , subnet-75386xxx , i-23faexxx , t2.micro , ami-18869819 1 , vpc-8c929xxx , subnet-c2634xxx , i-228faxxx , t2.micro , ami-29dc9228
まとめ
AWS SDK for Goによって、単純なタスクをこなすようなツールなどはGo言語でバイナリファイルをちょろっと作って配置するだけで良くなります。多数のサーバに配置するときにも環境依存を極小にすることが出来ます。正式な提供開始が楽しみですね!